package com.org.oracle.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.org.oracle.mysql.dto.UserAnswerSubmitDTO;
import com.org.oracle.mysql.entity.UserCommitResult;
import com.org.oracle.mysql.vo.ChapterProgressVo;
import com.org.oracle.mysql.vo.SubjectStudyTimeVo;
import com.org.oracle.result.Result;

import java.util.Date;
import java.util.List;


/**
 * (UserCommitResults)表服务接口
 *
 * @author luo
 * @since 2024-12-16 20:37:19
 */
/**
 * 用户提交结果服务接口，提供用户答案提交、临时保存、获取学习时间和进度等相关操作的服务。
 */
public interface UserCommitResultsService extends IService<UserCommitResult> {

    /**
     * 用户上传答案
     *
     * @param uid      用户ID
     * @param submitDTO 用户答案提交数据传输对象
     * @return 操作结果
     */
    Result userUpLoadAnswer(String uid, UserAnswerSubmitDTO submitDTO);

    /**
     * 用户临时保存答案
     *
     * @param uid      用户ID
     * @param submitDTO 用户答案提交数据传输对象
     * @return 操作结果
     */
    Result userTemporarySaveAnswer(String uid, UserAnswerSubmitDTO submitDTO);

    /**
     * 获取用户最后一次提交或临时保存的时间
     *
     * @param uid       用户ID
     * @param chapterId 章节ID
     * @return 最后一次提交或临时保存的时间
     */
    Date getLastSubmitOrTemporaryTime(String uid, String chapterId);

    /**
     * 获取用户某一章节的总学习时间
     *
     * @param uid       用户ID
     * @param chapterId 章节ID
     * @return 章节总学习时间（单位：毫秒）
     */
    Long getChapterTotalStudyTime(String uid, String chapterId);

    /**
     * 判断用户是否完成某一章节
     *
     * @param uid       用户ID
     * @param chapterId 章节ID
     * @return 如果完成返回true，否则返回false
     */
    boolean isChapterCompleted(String uid, String chapterId);

    /**
     * 根据科目ID获取用户各章节的学习进度
     *
     * @param uid       用户ID
     * @param subjectId 科目ID
     * @return 章节学习进度列表
     */
    List<ChapterProgressVo> getChapterProgressBySubjectId(String uid, String subjectId);

    /**
     * 获取用户当天各科目的学习时间
     *
     * @param uid 用户ID
     * @return 当天各科目学习时间列表
     */
    List<SubjectStudyTimeVo> getSubjectStudyTimeToday(String uid);

    /**
     * 根据用户ID获取科目学习进度
     *
     * @param uid 用户ID
     * @return 科目学习进度
     */
    Float getSubjectProgressByUid(String uid);
}

